﻿using System;
using System.Collections.Generic;
using System.Text;
using BpNTClassInternal;
using BpNTClass.DebugOutput;

namespace BpNTClass
{
    internal class cobraXmlReader : BpXmlReader
    {
        public cobraXmlReader(string Input, bool IsImport)
            : base(Input, IsImport, true, "")
        {
            if (this.Error && (!string.IsNullOrEmpty(this.ErrorText)))
            {
                //MT#22853: cobra Anbindung - Erstellung der Anbindung mit eingeschränkten Benutzerrechten erzeugt Fehler 
                BpMessageBox.ShowPanic(this.ErrorText);
                writeln.Logger("cobraXmlReader Error: " + this.ErrorText);
            }
        }

        private List<MetaInfo> _MetaList;
        private List<FieldValue> _ValueList;

        public List<MetaInfo> MetaList
        {
            get
            {
                if (_MetaList == null)
                { ToMetaInformation(); }
                return _MetaList;
            }
        }
        public List<FieldValue> ValueList
        {
            get
            {
                if (_ValueList == null)
                { ToValueInformation(); }
                return _ValueList;
            }
            set
            { _ValueList = value; }
        }

        private void ToMetaInformation()
        {
            if (_MetaList == null)
            {
                _MetaList = new List<MetaInfo>();
            }
            try
            {
                foreach (FieldInfo Element in FieldInfo)
                {
                    MetaInfo Meta = new MetaInfo(Element);
                    if (bReadIDField == false)
                    {
                        if (Meta.Visible == true)
                        { _MetaList.Add(Meta); }
                        else
                        {
#if DEBUG
                            System.Diagnostics.Debug.Write(" !! !! XMLreader META Excludet: " + Meta.Name + " " + Meta.Caption + "\r\n");
#endif
                        }
                    }
                    else
                    { _MetaList.Add(Meta); }
                }
            }
            catch
            { _MetaList = null; }  // wenn ein Fehler Auftrit wird keine Metalist zurückgegeben!
        }
        // ACHTUNG KANN NUR BEI EINZEILIGEN ERGEBNISSEN VERWENDET WERDEN
        private void ToValueInformation()
        {
            if (_ValueList == null)
            {
                _ValueList = new List<FieldValue>();
            }
            foreach (BpNTClassInternal.DataObject Element in DataProvider)
            {
                _ValueList.Clear();
                if (Element == null)
                { continue; }// falls die Auflistung leere Elemente enthält ... eigentlich Exception Fall

                int CollumCount = Element.FieldCount();
                for (int i = 0; i < CollumCount; i++)
                {
                    FieldValue locValue = new FieldValue(Element.ToFieldInfo(i), Element[i]);
                    if (bIsImportReader == false)
                    {
                        if (Element.ToFieldInfo(i).Visible == true)
                        { _ValueList.Add(locValue); }
                        else
                        {
#if DEBUG
                            System.Diagnostics.Debug.Write(" !! !! XMLreader VALUE Excludet: " + Element.ToFieldInfo(i).Name + " " + Element.ToFieldInfo(i).Caption + locValue._Value + "\r\n");
#endif
                        }
                    }
                    else
                    { _ValueList.Add(locValue); }
                }
            }
        }
        public override void ReadDataSet(string Input)
        {
            _ValueList = null;
            base.ReadDataSet(Input);
        }
    }
}
